/*
 * Copyright (c) 2023 JetBrains s.r.o.
 * Use of this source code is governed by the MIT license that can be found in the LICENSE file.
 */

package demo.svgModel

import org.jetbrains.letsPlot.commons.values.Bitmap
import org.jetbrains.letsPlot.commons.values.Color
import org.jetbrains.letsPlot.datamodel.svg.dom.*

object SvgImageElementModel {
    fun createModel(): SvgSvgElement {
        val svgRoot = SvgSvgElement(400.0, 200.0)

        val ellipse = SvgEllipseElement(200.0, 80.0, 170.0, 50.0)

        ellipse.fillColor().set(Color.YELLOW)
        ellipse.strokeColor().set(Color.parseHex("#006600"))
        ellipse.strokeWidth().set(2.0)
        ellipse.strokeOpacity().set(0.6)

        val text = SvgTextElement(20.0, 20.0, "Example Text")

        val pathBuilder = SvgPathDataBuilder(false)
        pathBuilder.moveTo(150.0, 175.0, true)
            .verticalLineTo(-100.0)
            .ellipticalArc(100.0, 100.0, 0.0, false, false, -100.0, 100.0)
            .closePath()

        val path = SvgPathElement(pathBuilder.build())
        path.fill().set(SvgColors.RED)
        path.stroke().set(SvgColors.create(0, 0, 255))
        path.getAttribute("stroke-width").set("5")

        val ellipse2 = SvgEllipseElement(250.0, 65.0, 40.0, 85.0)
        ellipse2.fill().set(SvgColors.GREEN)

        val rect = SvgRectElement(180.0, 50.0, 80.0, 50.0)
        rect.fillColor().set(Color(255, 0, 0, 100))

        val image = SvgImageElement(256.0, 64.0, 128.0, 64.0)
        image.href().set(SvgUtils.pngDataURI(SampleImageData.MINDUKA_PRESENT_BLUE_PACK))

        val bitmap = Bitmap(3, 3, SampleImageData.argb3x3())
        val imageEx = SvgImageElementEx(180.0, 110.0, 110.0, 80.0, bitmap)
//        imageEx.preserveAspectRatio().set("true")

        svgRoot.children().add(ellipse)
        svgRoot.children().add(rect)
        svgRoot.children().add(ellipse2)
        svgRoot.children().add(text)
        svgRoot.children().add(path)
        svgRoot.children().add(image)
        svgRoot.children().add(imageEx)

        return svgRoot
    }


    private fun addCircle(svgRoot: SvgSvgElement, x: Int, y: Int) {
        val circle = SvgCircleElement(x.toDouble(), y.toDouble(), 10.0)
        circle.fillColor().set(Color.BLACK)

        svgRoot.children().add(circle)
    }

    internal object SampleImageData {
        const val MINDUKA_PRESENT_BLUE_PACK =
            "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"
        const val CODE_BEAUTIFY =
            "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"


        fun argb3x3(): IntArray {
            //  R  |  G  |  B    alpha = 0.5
            //  R  |  G  |  B    alpha = 1
            // .5  |  1  |  .5   <-- gray, alpha

            return intArrayOf(
                SvgUtils.toARGB(Color.RED, 0.5), SvgUtils.toARGB(Color.GREEN, 0.5), SvgUtils.toARGB(Color.BLUE, 0.5),
                SvgUtils.toARGB(Color.RED), SvgUtils.toARGB(Color.GREEN), SvgUtils.toARGB(Color.BLUE),
                SvgUtils.toARGB(Color.BLACK, 0.5), SvgUtils.toARGB(Color.BLACK, 1.0), SvgUtils.toARGB(Color.BLACK, 0.5)
            )
        }
    }

    class CssRes : SvgCssResource {
        override fun css(): String {
            return ".ellipse-yellow { \n" +
                    "fill: yellow;\n" +
                    "}"
        }
    }
}